
// Manager/UserManager.java
package com.xxxy.ljh.myapplication.Manager;

import android.content.Context;
import android.content.SharedPreferences;
import com.xxxy.ljh.myapplication.model.User;

/**
 * 用户管理类，用于管理当前登录用户的状态、登录/登出操作以及用户信息的安全访问。
 * 使用单例模式确保全局唯一实例。
 */
public class UserManager {
    private static UserManager instance;
    private User currentUser;
    private Context context;

    /**
     * 构造方法，初始化 UserManager 实例。
     *
     * @param context 应用上下文对象
     */
    private UserManager(Context context) {
        this.context = context.getApplicationContext();
    }

    /**
     * 获取 UserManager 的单例实例。
     *
     * @param context 应用上下文对象
     * @return UserManager 的单例实例
     */
    public static UserManager getInstance(Context context) {
        if (instance == null) {
            instance = new UserManager(context);
        }
        return instance;
    }

    /**
     * 登录指定用户，并将登录状态保存到 SharedPreferences 中。
     *
     * @param user 要登录的用户对象
     */
    public void loginUser(User user) {
        // 修复：添加空值检查
        if (user != null) {
            this.currentUser = user;
            // 保存登录状态到 SharedPreferences
            SharedPreferences prefs = context.getSharedPreferences("user_prefs", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = prefs.edit();
            editor.putBoolean("is_logged_in", true);
            editor.putInt("user_id", user.getUserId());
            editor.apply();
        }
    }

    /**
     * 获取当前已登录的用户对象。
     *
     * @return 当前用户对象，如果未登录则返回 null
     */
    public User getCurrentUser() {
        return this.currentUser;
    }

    /**
     * 判断当前是否有用户已登录。
     *
     * @return 如果有用户登录返回 true，否则返回 false
     */
    public boolean isLoggedIn() {
        return this.currentUser != null;
    }

    /**
     * 注销当前用户，清除内存中的用户信息及 SharedPreferences 中的登录状态。
     */
    public void logoutUser() {
        this.currentUser = null;
        // 清除 SharedPreferences 中的登录状态
        SharedPreferences prefs = context.getSharedPreferences("user_prefs", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.clear();
        editor.apply();
    }

    /**
     * 安全地获取当前用户的名称（优先使用真实姓名，其次为用户名）。
     * 若无有效名称信息，则返回默认字符串“未知用户”。
     *
     * @return 用户名或默认提示字符串
     */
    // 修复：添加安全获取用户信息的方法
    public String getSafeUserName() {
        if (currentUser != null) {
            String realName = currentUser.getRealName();
            if (realName != null && !realName.isEmpty()) {
                return realName;
            }
            String username = currentUser.getUsername();
            if (username != null && !username.isEmpty()) {
                return username;
            }
        }
        return "未知用户";
    }

    /**
     * 安全地获取当前用户的学号信息。
     * 若无有效学号信息，则返回默认字符串“未设置”。
     *
     * @return 学号或默认提示字符串
     */
    public String getSafeStudentId() {
        if (currentUser != null && currentUser.getStudentId() != null) {
            return currentUser.getStudentId();
        }
        return "未设置";
    }

    /**
     * 获取当前用户的角色标识。
     * 若未登录，默认返回 0 表示普通用户角色。
     *
     * @return 用户角色标识
     */
    public int getUserRole() {
        if (currentUser != null) {
            return currentUser.getRole();
        }
        return 0; // 默认普通用户角色
    }
}